#include <iostream>
#include <string>
#include <list>
#include "preIndexador/PreIndexador.h"
#include "indice/Indexador.h"

using namespace std;

void indexar(string directorio) {
	PreIndexador *preIndexer = new PreIndexador();
	list<string>* homeFiles = new list<string>();
	homeFiles = preIndexer->preIndexarPaths(directorio);

	Indexador* unIndexador = new Indexador();

	unIndexador->indexar(preIndexer->preIndexarTerminos(homeFiles), homeFiles);
	cout << "Indexado terminado." << endl;
}

void consultar(string termino) {
	//*********** ACA LEVANTAR EL INDEXADOR DEL DISCO EN VEZ DE CREAR UNO NUEVO ****/
	//*********** EN BUSCAR CONSULTA LO LEVANTA DE DISCO, AHI SOLO CREA UN OBJETO****/
	Indexador* unIndexador = new Indexador();
	list<string> pila = unIndexador->buscarConsulta(termino);

	list<string>::iterator it = pila.begin();

	if (it == pila.end()) {
		cout << "No se encontraron documentos." << endl;
	}

	while (it != pila.end()) {
		cout << *it << endl;
		it++;
	};
}

void imprimirUso() {
	cout << "Uso:" << endl;
	cout << "     Indexar:      -i <directorio>" << endl;
	cout << "     Consultar:    -q <termino>" << endl;
}

int main(int argc, char **argv) {

	//	 Verifico cantidad de parametros correcta
	if (argc != 3) {
		imprimirUso();
		return 1;
	}

	string comando(argv[1]);

	string argumento = argv[2];

	if (comando == "-i" || comando == "-I") {
		cout << "- Indexar: " << argumento << endl;
		indexar(argumento);
	} else if (comando == "-q" || comando == "-Q") {
		cout << "- Consultar: " << argumento << endl;
		consultar(argumento);
	} else {
		imprimirUso();
		return 1;
	}

	return 0;
}

